package cn.pupil.design;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Description: 管理员，管理备忘录
 * @Author: pupil
 * @Date: 2024/07/28 下午 9:19
 */
public class Admin {

    // 当前位置索引
    private int cursorIdx = 0;
    // 记录备忘录
    private List<ConfigMemento> mementoList = new ArrayList<>();
    // 记录备忘录，key：配置文件的版本号，value：备忘录
    private Map<String, ConfigMemento> mementoMap = new ConcurrentHashMap<>();

    /**
     * 添加备忘录
     *
     * @param memento 备忘录类
     */
    public void append(ConfigMemento memento) {
        mementoList.add(memento);
        mementoMap.put(memento.getConfigFile().getVersionNo(), memento);
        cursorIdx++;
    }

    /**
     * 回滚
     *
     * @return
     */
    public ConfigMemento undo() {
        if (--cursorIdx <= 0) return mementoList.get(0);
        return mementoList.get(cursorIdx);
    }

    /**
     * 返回
     */
    public ConfigMemento redo() {
        if (++cursorIdx > mementoList.size()) return mementoList.get(mementoList.size() - 1);
        return mementoList.get(cursorIdx);
    }

    /**
     * 定向获取
     * @param versionNo 配置文件版本号
     * @return
     */
    public ConfigMemento get(String versionNo){
        return mementoMap.get(versionNo);
    }
}
